Django中的override

您所在的位置:网站首页 django 文档 Django中的override

Django中的override

2023-02-16 16:24| 来源: 网络整理| 查看: 265

Django 关于测试工具的文档提到了@override_settings和@modify_settings装饰器用于测试,但是从文档(至少对我来说)来看它们之间有什么区别尚不清楚.

那么,它是什么?

1> Jamie Counse..:

override_settings将完全更改存储在设置旁边的对象.也就是说,原始值将被销毁.modify_settings将修改现有的对象.这是通过服用append,prepend和remove参数.您在文档中看到的MIDDLEWARE对象不是对象,它是对对象执行MIDDLEWARE以修改它的步骤列表.例如,给定以下MIDDLEWARE定义settings.py:

MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]

如果您使用:

@modify_settings(MIDDLEWARE={ 'append': 'django.middleware.cache.FetchFromCacheMiddleware', 'prepend': 'django.middleware.cache.UpdateCacheMiddleware', 'remove': [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', ], })

它产生最终设置:

MIDDLEWARE=[ 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware' ]

相同的结果override_settings将需要上面的整个结果对象.

这里的问题很明显.如果我们更改原始 MIDDLEWARE设置settings.py,我们将不得不更新我们的测试.如果我们使用modify_settings,我们可能仍然会很好.

我同意这些文档并不清楚,因为它并没有真正说清楚它'append'是一个特殊的关键字,例如.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3